//
//  SHPEmoticonTool.swift
//  weibo
//
//  Created by songhuipan on 16/4/25.
//  Copyright © 2016年 songhuipan. All rights reserved.
//

import UIKit
///  表情最大的列数
let emoticonMaxCol = 7
/// 表情最大行数
let emoticonMaxRow = 3
/// 表情最多个数
let emoticonMaxCount = emoticonMaxCol * emoticonMaxRow - 1

class SHPEmoticonTool: NSObject {
    
    override init() {
        super.init()
    }
    // MARK: 懒加载表情三维数组
    lazy var emoticonGroup:[[[SHPEmoticonModel]]] = {
        
        return [ self.getEmoticonsTwo(self.defaultEmoticon),
            self.getEmoticonsTwo(self.emojiEmoticon),
            self.getEmoticonsTwo(self.lxhEmoticon)
        ]
    }()
    // MARK:懒加载默认表情一维数组
    lazy var defaultEmoticon:[SHPEmoticonModel] = {
        return self.getEmoticonsOne("default/")
    }()
    // MARK:懒加载Emoji表情一维数组
    lazy var emojiEmoticon:[SHPEmoticonModel] = {
        return self.getEmoticonsOne("emoji/")
    }()
    // MARK:懒加载浪小花表情一维数组
    lazy var lxhEmoticon:[SHPEmoticonModel] = {
        return self.getEmoticonsOne("lxh/")
    }()
    // MARK:懒加载读取bundle文件.不能设置为私有，外界需要调取
    lazy var emoticonBundle:NSBundle = {
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)
        
        return NSBundle(path: path!)!
        
    }()
    // MARK:创建单例访问方法
    static let sharedTools:SHPEmoticonTool = SHPEmoticonTool()

}
extension SHPEmoticonTool{
    // MARK:截取一维数组获得二维数组的方法
    func getEmoticonsTwo(emoticonsOne:[SHPEmoticonModel])->[[SHPEmoticonModel]]{
        
        // 计算表情有多少页
        let pageCount = (emoticonsOne.count + emoticonMaxCount - 1) / emoticonMaxCount
        // 定义一个二维数组
        var tempArray:[[SHPEmoticonModel]] = [[SHPEmoticonModel]]()
        
        for i in 0..<pageCount{
            // 截取数组的起始位置
            let loc = i * emoticonMaxCount
            // 截取的长度
            var len = emoticonMaxCount
            
            if loc + len > emoticonsOne.count {
                len = emoticonsOne.count - loc
            }
            // 截取的范围
            let range = NSMakeRange(loc, len)
                        // 截取数组
            let array = (emoticonsOne as NSArray).subarrayWithRange(range)
            tempArray.append(array as! [SHPEmoticonModel])
        }
        return tempArray
    }
    // MARK:读取文件获得一位数组的方法
    func getEmoticonsOne(path:String)->[SHPEmoticonModel]{
        // 获得对应的plist文件
        let file = emoticonBundle.pathForResource("\(path)info.plist", ofType: nil)
        // 读取数据获得数组
        let array = NSArray(contentsOfFile: file!)!
        // 定义一个临时数组
        var tempArray:[SHPEmoticonModel] = [SHPEmoticonModel]()
        // 遍历数组，字典转模型
        for dic in array {
            let model = SHPEmoticonModel(dic: dic as! [String:AnyObject])
            // 设置图片的全路径
            model.path = path
            
            tempArray.append(model)
        }
        return tempArray
    }
    // MARK:根据名字返回相应的模型
    func getEmoticonModel(chs:String)->SHPEmoticonModel?{
        
        for emoticonModel in defaultEmoticon {
            if emoticonModel.chs == chs{
                return emoticonModel
            }
        }
        
        for emoticonModel in lxhEmoticon{
            if emoticonModel.chs == chs{
                return emoticonModel
            }
        }
        
        return nil
    }
}























































